/** Dies ist die Basisklasse fuer alle moeglichen Bauelemente.
 *
 * @brief Fachklasse: Abstrakte-Basisklasse fuer Bauelemente
 *
 * @author Nico Mutter
 * @date 19.05.2012
 *
 * @version 0.1
 * Doxygen Kommentare hinzugefuegt
 */

#ifndef TBauelementH
#define TBauelementH

#include "OWLComps.hpp"
#include "OWPins.hpp"
#include "PinDef.h"
#include "DebugKonsole.h"

class TBauelement:public TObject{

protected:
	/** Statische Variable, welche aussagt ob simuliert werden soll oder nicht
	*/
	static bool simulation;

public:

	/** Setzt die statische Variable TBauelement::simulation auf den uebergebenen Zustand.
	*  @param[in] state Zustand auf den TBauelement::simulation gesetzt werden soll
	*/
	static void __fastcall setSimulation(bool state);

	/** Gibt den Zustand der Variable TBauelement::simulation zurueck
	* @return Zustand der Variable TBauelement::simulation
	*/
	static bool __fastcall getSimulation();

	/** Virtuelle Funktion, welche von den Unterklassen ueberschrieben werden muss.
	* \n Gibt den uebergebenen Pin zurueck.
	*  @param[in] pin Bestimmt welcher Pin zurueckgegeben werden soll
	*  @return Erfolg: Referenz auf angeforderten Pin
	*  \n Misserfolg: NULL
	*/
	virtual TOWBasicPin* __fastcall getPin(Pin pin)=0;

	/** Virtuelle Funktion, welche von den Unterklassen ueberschrieben werden muss.
	* \n Versucht die uebergebenen Pins zu verbinden.
	*  @param[in] pin Pin der Klasse, welcher verbunden werden soll
	*  @param[in] pinToConnectTo Pin zu dem die Verbindung aufgebaut werden soll
	*  @return Erfolg: true \n
	*		  Misserfolg: false
	*/
	virtual bool __fastcall connect(Pin pin, TOWBasicPin* pinToConnectTo)=0;

	/** Virtuelle Funktion, welche von den Unterklassen ueberschrieben werden muss. \n Trennt uebergebenen Pin mit allen mit ihm verbundenen Pins
	*  @param[in] pin Pin welcher getrennt werden soll
	*/
	virtual void __fastcall disconnect(Pin pin)=0;

};

#endif
